/**
 * @file        {{ var_filename }}.c
 * @brief       XXXX
 * @note        XXXX
 * @author      {{ var_author }}({{ var_email }})
 * @date        {{ var_date }}
 * @version     1.0

 * @par         修改日志
 * <table>
 * <tr><th>Date         <th>Version     <th>Author      <th> Description
 * <tr><td>{{ var_date }}   <td>1.0         <td>{{ var_author }}       <td> 创建初始版本
 * @copyright 杭州鸿泉物联网技术股份有限公司
 */
 
#include "{{ var_filename }}.h"
#include "atctrl/ATCtrl.h"
#include "atserver/ATServer.h"
#include "ofc/ofc_types.h"
// #include "ofc/ofc_string.h"

#ifndef _ASSIST_ALOG_H_
#inlcude <stdio.h>
#define ALOG_I  printf
#endif

static Bool L_CmpAName(const char* a, const char* b)
{
    Bool result = False;
    const Int32 max_len = 256;
    int i;

    for (i = 0; i < max_len; i++)
    {
        if (*a != *b)
            break;
        else if (*a == '\0')
        {
            result = True;
            break;
        }
        else
        {
            a++;
            b++;
        }
    }
    
    return result;
}

// 获取扩展名的值类型函数类型
// 参数:
//    AChipNo     芯片模块索引号
//    AName       扩展名
//    AExtID      返回扩展名对应的扩展ID, 用于读取和设置扩展值
// 返回值:
//    > 0         获取成功并返回扩展值类型, 参见 ATS_TValType 定义
//    (其它值)    获取失败的返回码, 参见 ATS_TResult 定义
int RteAtServerExtValType(int AChipNo, const char* AName, int* AExtID)
{
    int result = ATS_vtNone;
    
    if (AChipNo != ATS_cnQuectel || AName == NULL || AExtID == NULL)
        result = ATS_rIsIllegal;
    {%- for var_param in var_param_list %}
    else if (L_CmpAName(AName, "{{ var_param.get('属性名', 'Unknown') }}"))
    {
        *AExtID = {{ var_param.get('扩展编号', '-1') }};
        {%- if var_param.get('数据类型', 'Unknown') == 'Int' %}
        result = ATS_vtInt;
        {%- elif var_param.get('数据类型', 'Unknown') == 'Str' %}
        result = ATS_vtStr;
        {%- else %}
        result = ATS_vtNone;
        {%- endif %}
        ALOG_I("AName: {{ var_param.get('属性名', 'Unknown') }}, AExtID: {{ var_param.get('扩展编号', '-1') }}, type:{{ var_param.get('数据类型', 'Unknown') }}\n");
    }
    {%- endfor %}
    
    return result;
}


// 读取扩展项的整型值函数类型
// 参数:
//    AChipNo     芯片模块索引号
//    AExtID      扩展ID
//    ARetCode    读取扩展项的返回码, 若为 NULL 则忽略返回码
//                注: 参见 ATS_TResult 定义
// 返回值:
//    (值)        返回指定扩展项的整型值
int RteAtServerExtGetInt(int AChipNo, int AExtID, int* ARetCode)
{
    int result = ATS_rAttrInvalid;
    int ret_code;

    switch (AExtID)
    {
        {%- for var_param in var_param_list %}
        {%- if var_param.get('数据类型', 'Unknown') == 'Int' %}
        case {{ var_param['扩展编号'] }}:
        {
            result = {{ var_param['ATCtrl属性函数前缀'] }}GetInt(ATS_cnQuectel, {{ var_param['ATCtrl属性ID'] }}, &ret_code);
            ALOG_I("Get {{ var_param.get('属性名', 'Unknown') }}: ret_code: %d, value: %s\n", ret_code, result);
            break;
        }
        {%- endif %}
        {%- endfor %}
        default:
            result = ATS_rAttrInvalid;
            break;
    }


    if (ARetCode != NULL)
    {
        *ARetCode = ret_code;
    }

    return result;  
}


// 读取扩展项的字符串函数类型
// 参数:
//    AChipNo     芯片模块索引号
//    AExtID      扩展ID
//    ARetCode    读取扩展项的返回码, 若为 NULL 则忽略返回码
//                注: 当返回码小于 0 时为错误码, 参见 ATS_TResult 定义,
//                    否则为返回字符串的字节数
// 返回值:
//    (值)        返回指定扩展项的字符串值
char* RteAtServerExtGetStr(int AChipNo, int AExtID, int* ARetCode)
{
    char *result = NULL;
    int ret_code;

    switch (AExtID)
    {
        {%- for var_param in var_param_list %}
        {%- if var_param.get('数据类型', 'Unknown') == 'Str' %}
        case {{ var_param['扩展编号'] }}:
        {
            result = {{ var_param['ATCtrl属性函数前缀'] }}GetStr(ATS_cnQuectel, {{ var_param['ATCtrl属性ID'] }}, &ret_code);
            ALOG_I("Get {{ var_param.get('属性名', 'Unknown') }}: ret_code: %d, value: %s\n", ret_code, result);
            break;
        }
        {%- endif %}
        {%- endfor %}
        default:
            result = NULL;
            break;
    }


    if (ARetCode != NULL)
    {
        *ARetCode = ret_code;
    }

    return result;  
}


// 设置扩展项的整型值函数类型
// 参数:
//    AChipNo     芯片模块索引号
//    AExtID      扩展ID
//    AValue      指定扩展项的整型值
// 返回值:
//    rSuccess    设置成功
//    <= 0        设置失败的返回码, 参见 ATS_TResult 定义
int RteAtServerExtSetInt(int AChipNo, int AExtID, int AValue)
{
    int result = ATS_rAttrInvalid;

    switch (AExtID)
    {
        {%- for var_param in var_param_list %}
        {%- if var_param.get('数据类型', 'Unknown') == 'Int' %}
        case {{ var_param['扩展编号'] }}:
        {
            result = {{ var_param['ATCtrl属性函数前缀'] }}SetInt(ATS_cnQuectel, {{ var_param['ATCtrl属性ID'] }}, AValue);
            ALOG_I("Set {{ var_param.get('属性名', 'Unknown') }}: ret_code: %d, value: %s\n", result, AValue);
            break;
        }
        {%- endif %}
        {%- endfor %}
        default:
            result = ATS_rAttrInvalid;
            break;
    }

    return result; 
}


// 设置扩展项的字符串函数类型
// 参数:
//    AChipNo     芯片模块索引号
//    AExtID      扩展ID
//    AValue      指定扩展项的字符串值
//    ASize       字符串长度
// 返回值:
//    rSuccess    设置成功
//    <= 0        设置失败的返回码, 参见 ATS_TResult 定义
int RteAtServerExtSetStr(int AChipNo, int AExtID, const char* AValue, int ASize)
{
    int result = NULL;

    switch (AExtID)
    {
        {%- for var_param in var_param_list %}
        {%- if var_param.get('数据类型', 'Unknown') == 'Str' %}
        case {{ var_param['扩展编号'] }}:
        {
            result = {{ var_param['ATCtrl属性函数前缀'] }}SetStr(ATS_cnQuectel, {{ var_param['ATCtrl属性ID'] }}, AValue, ASize);
            ALOG_I("Set {{ var_param.get('属性名', 'Unknown') }}: ret_code: %d, value: %s\n", result, AValue);
            break;
        }
        {%- endif %}
        {%- endfor %}
        default:
            result = NULL;
            break;
    }

    return result;  
}



